﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using kk.components.contracts;
using kk.messages.contracts.DataModel;
using kk.messages.contracts.ViewModel;

namespace kk.belegungsplanansicht.usercontrol
{
    public partial class CtlBelegungsplanAnsicht : UserControl, IBelegungsplanAnsicht
    {
        private List<Platzbelegung> reservierungswünsche;


        public CtlBelegungsplanAnsicht()
        {
            InitializeComponent();
        }


        public void ProcessBelegungsplan(Belegungsplan belegungsplan)
        {
            this.reservierungswünsche = new List<Platzbelegung>();

            this.lstBelegungen.Items.Clear();

            foreach (var platzbelegung in belegungsplan.Plätze)
            {
                var lvi = this.lstBelegungen.Items.Add(string.Format("{0}:{1} ({2}) ", platzbelegung.Position, platzbelegung.IstBelegt, platzbelegung.Preiskategorie));
                lvi.Tag = platzbelegung;
                if (platzbelegung.IstBelegt) lvi.ForeColor = Color.LightGray;
            }
        }

        public event Action<IEnumerable<Platzposition>> OnGeändertePlatzwahl;


        private void lstBelegungen_Click(object sender, EventArgs e)
        {
            if (this.lstBelegungen.SelectedItems.Count > 0)
            {
                if (!((Platzbelegung)this.lstBelegungen.SelectedItems[0].Tag).IstBelegt)
                {
                    var gewählterPlatz = (Platzbelegung)this.lstBelegungen.SelectedItems[0].Tag;
                    if (this.reservierungswünsche.Contains(gewählterPlatz))
                    {
                        this.reservierungswünsche.Remove(gewählterPlatz);
                        this.lstBelegungen.SelectedItems[0].BackColor = Color.White;
                    }
                    else
                    {
                        this.reservierungswünsche.Add(gewählterPlatz);
                        this.lstBelegungen.SelectedItems[0].BackColor = Color.Green;
                    }
                }

                this.OnGeändertePlatzwahl(this.reservierungswünsche.Select(p => p.Position));

                this.lstBelegungen.SelectedItems.Clear();
            }
        }
    }
}
